#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define vt vector
#define pb push_back
#define eb emplace_back
#define all(x) (x).begin(), (x).end()
#define lb lower_bound
#define ub upper_bound
typedef pair<int, int> pairs;
const ll N = 1e6 + 1;
const int M=1e9 + 7;
#define INF 1e18
// bool isPrime(ll n)
// {
// if (n == 1)
// return false;
// for (ll i = 2; i * i <= n; i++) {
// if (n % i == 0)
// return false;
// }
// return true;
// }
// ll factorial(ll n)
// {
// return (n==1 || n==0) ? 1: n * factorial(n - 1);
// }
// string bin(ll num)
// {
// string str;
// while(num)
// {
// if(num & 1)
// str+='1';
// else
// str+='0';
// num>>=1; // Right Shift by 1
// }
// return str;
// }
// string db(int n)
// {
// // Size of an integer is assumed to be 32 bits
// string ans;
// for (int i = 64; i >= 0; i--)
// {
// int k = n >> i;
// if (k & 1)
// ans += '1';
// else
// ans += '0';
// }
// return ans;
// }
// string rev(string x)
// {
// string ans=x;
// reverse(all(ans));
// return ans;
// }
// ll power(ll x, ll p)
// {
// ll ans = 1;
// while(p)
// {
// if(p&1)
// ans=ans*x%M;
// p/=2;
// x=x*x%M;
// }
// return ans;
// }
// ll fact[N];
// void precalc()
// {
// fact[0]=1;
// for(int i=1;i<N;i++)
// fact[i]=(fact[i-1]*1ll*i)%M;
// }
// ll binexp(ll a,ll b,ll m)
// {
// ll res=1;
// while(b>0)
// {
// if(b&1)
// res=(res*1ll*a)%m;
// a=(a*1ll*a)%m;
// b>>=1;
// }
// return res;
// }
// ll ncr(ll n,ll r)
// {
// precalc();
// ll ans=fact[n];
// ll den=(fact[n-r]*1ll*fact[r])%M;
// ans=ans*binexp(den,M-2,M);
// ans%=M;
// return ans;
// }
// ll prime[nmax],cnt[nmax];
// void sieve()
// {
// prime[0]=0;
// prime[1]=0;
// for(ll i=2;i*i<nmax;i++)
// {
// if(prime[i]!=0)
// continue;
// for(ll j=i*i;j<nmax;j+=i)
// prime[j]=i;
// }
// }
// ll sm(ll n)
// {
// ll s=0;
// while(n)
// {
// s+=n%10;
// n/=10;
// }
// return s;
// }
int main()
{
int t=1;
cin>>t;
while(t--)
{
ll n,m=0,z,h=INF,ct=0,d=0,mx=0,sum=0,ans=-1,mn=0,f=1,f1=0,k=1,x=0,y=0;
cin>>n;
// ll a[n],b[n],c[n];
// string s;
// cin>>s;
// vt<ll> v;
// for(ll i=0;i<n;i++)
// cin>>a[i];
if(n%2==0)
{
cout<<"No"<<endl;
continue;
}
cout<<"Yes"<<endl;
x=1,y=2*n;
for(ll i=0;i<n;i++)
{
cout<<x<<" "<<y<<endl;
x+=2;
x%=n;
if(x==0)
x=n;
y--;
}
// auto up =ub(a,a+n,d);
// int i=0;
// while(a[i]<=d)
// {
// d-=a[i];
// i++;
// }
// for(auto x:v)
// cout<<x<<" ";
// cout<<(f?"YES":"NO")<<endl;
// if(f)
// break;
// }
// if(f)
// {
// cout<<"TAK"<<endl;
// for(ll i=0;i<n;i++)
// cout<<b[i]+1<<" ";
// cout<<endl;
// continue;
// }
// cout<<endl;
// for(auto x:v)
// cout<<x<<" ";
// cout<<endl;
}
}
1711A - Perfect Permutation | 1701B - Permutation |
1692A - Marathon | 1066A - Vova and Train |
169B - Replacing Digits | 171D - Broken checker |
380C - Sereja and Brackets | 1281B - Azamon Web Services |
1702A - Round Down the Price | 1681C - Double Sort |
12A - Super Agent | 1709A - Three Doors |
1680C - Binary String | 1684B - Z mod X = C |
1003A - Polycarp's Pockets | 1691B - Shoe Shuffling |
1706A - Another String Minimization Problem | 1695B - Circle Game |
1702B - Polycarp Writes a String from Memory | 1701A - Grass Field |
489C - Given Length and Sum of Digits | 886B - Vlad and Cafes |
915A - Garden | 356A - Knight Tournament |
1330A - Dreamoon and Ranking Collection | 1692B - All Distinct |
1156C - Match Points | 1675A - Food for Animals |
1328C - Ternary XOR | 1689A - Lex String |